package cn.qicaiwang.open.app.controller;

import cn.qicaiwang.open.app.dto.*;
import cn.qicaiwang.open.app.server.LegalCalculationService;
import cn.qicaiwang.open.common.response.ResponseResult;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.math.BigDecimal;

/**
 * 法律计算控制器
 */
@RestController
@RequestMapping("/qcwapp/legalCalculator")
@RequiredArgsConstructor
@Validated
public class LegalCalculationController {

    private final LegalCalculationService calculationService;

    /**
     * 工伤赔偿计算接口
     * @param dto 工伤赔偿计算参数
     * @return 计算结果
     */
    @PostMapping("/workInjury")
    public ResponseResult<BigDecimal> calculateWorkInjury(
            @RequestBody @Valid WorkInjuryCompensationDTO dto) {
        return ResponseResult.ok(calculationService.calculateWorkInjuryCompensation(dto));
    }

    /**
     * 利息计算接口
     * @param dto 利息计算参数
     * @return 计算结果
     */
    @PostMapping("/interest")
    public ResponseResult<BigDecimal> calculateInterest(
            @RequestBody @Valid InterestCalculationDTO dto) {
        return ResponseResult.ok(calculationService.calculateInterest(dto));
    }

    /**
     * 诉讼费计算接口
     * @param dto 诉讼费计算参数
     * @return 计算结果
     */
    @PostMapping("/litigationFee")
    public ResponseResult<BigDecimal> calculateLitigationFee(
            @RequestBody @Valid FeeCalculationDTO dto) {
        return ResponseResult.ok(calculationService.calculateLitigationFee(dto));
    }

    /**
     * 利率换算接口
     * @param dto 利率换算参数
     * @return 计算结果
     */
    @PostMapping("/interestRateConversion")
    public ResponseResult<BigDecimal> convertInterestRate(
            @RequestBody @Valid InterestRateConversionDTO dto) {
        return ResponseResult.ok(calculationService.convertInterestRate(dto));
    }

    /**
     * 仲裁费计算接口
     * @param dto 仲裁费计算参数
     * @return 计算结果
     */
    @PostMapping("/arbitrationFee")
    public ResponseResult<BigDecimal> calculateArbitrationFee(
            @RequestBody @Valid FeeCalculationDTO dto) {
        return ResponseResult.ok(calculationService.calculateArbitrationFee(dto));
    }

    /**
     * 保全费计算接口
     * @param dto 保全费计算参数
     * @return 计算结果
     */
    @PostMapping("/preservationFee")
    public ResponseResult<BigDecimal> calculatePreservationFee(
            @RequestBody @Valid FeeCalculationDTO dto) {
        return ResponseResult.ok(calculationService.calculatePreservationFee(dto));
    }

    /**
     * 执行申请费计算接口
     * @param dto 执行申请费计算参数
     * @return 计算结果
     */
    @PostMapping("/executionFee")
    public ResponseResult<BigDecimal> calculateExecutionFee(
            @RequestBody @Valid FeeCalculationDTO dto) {
        return ResponseResult.ok(calculationService.calculateExecutionFee(dto));
    }
}